using JT808Protocol.Common;
using JT808Protocol.Models.BodyParserStrategy.Location;
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;

namespace JT808Protocol.Models.BodyParserStrategy
{
    /// <summary>
    /// 多媒体数据上传(1078中只有图片)
    /// </summary>
    public class DrImageReport_0x0801 : IJT808Body
    {
        /// <summary>
        /// 多媒体编号
        /// </summary>
        [JsonPropertyName("多媒体编号")] public uint MediaID { get; set; }

        /// <summary>
        /// 多媒体类型（1078 中只有图片）
        /// 0 图像，1 音频，2 视频
        /// </summary>
        [JsonPropertyName("多媒体类型")] public byte MediaType { get; set; }

        /// <summary>
        /// 多媒体格式编码
        /// 0 JPEG,1 TIF,2 MP3, 3 WAV,4 WMV,其它保留
        /// </summary>
        [JsonPropertyName("多媒体格式编码")] public byte MediaFomat { get; set; }

        /// <summary>
        /// 事件项编码
        /// 0 平台下发指令,1 定时动作,2 抢劫报警，3 碰撞触发,其它保留
        /// </summary>
        [JsonPropertyName("事件项编码")] public byte EventCode { get; set; }

        /// <summary>
        /// 通道ID
        /// </summary>
        [JsonPropertyName("通道ID")] public byte ChannelID { get; set; }

        /// <summary>
        /// 位置信息汇报（28byte）
        /// </summary>
        [JsonPropertyName("位置信息汇报")] public DrLocation_0x0200 PhotoLocation { get; set; }

        /// <summary>
        /// 多媒体数据包
        /// </summary>
        [JsonPropertyName("多媒体数据包")] public byte[] MediaData { get; set; }

        /// <summary>
        /// 收到的第一个媒体流包，包含MediaID等供补传用
        /// </summary>
        public static DrImageReport_0x0801 FirstMediaBody { get; set; }

        public override IJT808Body ReadBody(ReadOnlySpan<byte> source, ref int startIndex)
        {
            //需要分包并且不是首包
            if (HeaderContext.MessageBodyProperties.IsSplitPackage && HeaderContext.PackageInfo.PackageIndex != 1)
            {
                MediaData = new byte[source.Length - startIndex - 1 - 1];
                Array.Copy(source.ToArray(), startIndex, MediaData, 0, source.Length - startIndex - 1 - 1);

                return null;
            }

            //多媒体ID
            MediaID = ParseHelper.Uint32(ref source, startIndex);

            //多媒体类型
            MediaType = source[startIndex + 4];

            //多媒体格式编码
            MediaFomat = source[startIndex + 5];

            //事件项编码
            EventCode = source[startIndex + 6];

            //通道ID
            ChannelID = source[startIndex + 7];

            // 位置信息
            PhotoLocation = new DrLocation_0x0200();
            startIndex += 8;
            PhotoLocation.ReadBody(source, ref startIndex);

            // 多媒体数据包
            int MediaDataLen = (source.Length - startIndex - 36 - 1 - 1);
            MediaData = new byte[MediaDataLen];
            Array.Copy(source.ToArray(), startIndex + 36, MediaData, 0, MediaDataLen);

            return this;
        }

        public override List<byte> WriteToBytes()
        {
            throw new NotImplementedException();
        }
    }
}